package cn.rayfoo.common.response;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.springframework.util.ObjectUtils;


/**
 * @author rayfoo@qq.com
 * @date 2020年8月6日
 */
@Data@Builder
@Accessors(chain = true)
@ApiModel("返回说明")
@NoArgsConstructor
@AllArgsConstructor
public class Result {

    /**
     * 状态码
     */
    @ApiModelProperty(value = "返回状态码；200:成功")
    private Integer code;

    /**
     * 提示信息
     */
    @ApiModelProperty(value = "提示信息")
    private String  msg;

    /**
     * 数据记录
     */
    @ApiModelProperty(value = "数据记录")
    private Object data;

    /**
     * 构造方法
     * @param code 状态码
     * @param msg 提示信息
     */
    public Result(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    /**
     * 默认的成功方法
     */
    public static Result success(){
        return Result.builder().code(HttpStatus.OK.value()).msg(HttpStatus.OK.name()).build();
    }

    /**
     * 默认的成功方法
     * @param msg 成功时提示的信息
     */
    public static Result success(String msg){
        return Result.builder().code(HttpStatus.OK.value()).msg(msg).build();
    }

    /**
     * 默认的失败方法
     */
    public static Result error(){
        return Result.builder().code(HttpStatus.INTERNAL_SERVER_ERROR.value()).msg(HttpStatus.INTERNAL_SERVER_ERROR.name()).build();
    }

    /**
     * 默认的失败方法
     * @param msg 失败时提示的信息
     */
    public static Result error(String msg){
        return Result.builder().code(HttpStatus.INTERNAL_SERVER_ERROR.value()).msg(msg).build();
    }

}
